www.gusucode.com > 非局部均值(Non-local Mean)SAR滤波 > 非局部均值(Non-local Mean)SAR滤波/NLMean.m
function I_out = NLMean(I_in) [nHeight, nWidth] = size(I_in); I_out = zeros(nHeight, nWidth);%输出的图像 nSim = 3; %相似窗口为 2*nSim+1 nBlk = 10; %最大块为 2*nBlk+1 h = 0.5; %控制权值的参数 for m=1:nHeight for n=1:nWidth %求得块边界 blk_top = max(1, m-nBlk); blk_bottom = min(nHeight, m+nBlk); blk_left = max(1, n-nBlk); blk_right = min(nWidth, n+nBlk); wDist = zeros(blk_bottom - blk_top + 1, blk_right - blk_left + 1);%用来计算blk内各点的权值 for i=blk_top:blk_bottom for j=blk_left:blk_right nSum = 0; nCount = 0;%用来统计像素距离和个数 for i0 = -nSim:nSim for j0 = -nSim:nSim if(m+i0>0 && m+i0<nHeight+1 && n+j0>0 && n+j0<nWidth+1 && i+i0>0 && i+i0<nHeight+1 && j+j0>0 && j+j0<nWidth+1) %判断两小块是否都在在图像中 nSum = nSum + (I_in(m+i0, n+j0) - I_in(i+i0, j+j0))^2; nCount = nCount + 1;%统计两小块窦娥在图像中的像素个数 end end end nDist = nSum / nCount; wDist(i-blk_top + 1, j - blk_left +1) = exp(-nDist /(h*h));%将像素灰度距离用指数形式表示,代表权值 end end Sum_wDist = mean2(wDist) * (blk_bottom - blk_top + 1) *(blk_right - blk_left + 1);%求解权值的综合 wDist = wDist / Sum_wDist;%归一化权值 I_blk = I_in(blk_top:blk_bottom, blk_left:blk_right); I_blk = I_blk .* wDist; I_out(m,n) = mean2(I_blk) * (blk_bottom - blk_top + 1) *(blk_right - blk_left + 1); end m end